package org.lanqiao.tjut.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.lanqiao.tjut.bean.AdminBean;
import org.lanqiao.tjut.bean.OpeBean;
import org.lanqiao.tjut.bean.UserBean;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

public class UserLoginInterceptor implements HandlerInterceptor {

	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		/*
		 * 在prehandle方法中，使用返回值进行拦截处理： 返回false -- 进行拦截； 返回true --
		 * 放行，进入后续的拦截器或controller
		 */
		// 对于登录请求的url连接进行识别，并允许其通过拦截器
		// 注意：这里由于是使用url进行识别，所以在编程中需要将登陆的请求url名和
		// 和非登录的请求url名进行人为区别

		if (request.getRequestURI().contains("/home") || request.getRequestURI().contains("/logined")) {
			// 检测出登陆请求，进行方形
			return true;
		}
		/*
		 * 非登录请求： 获取当前请求sesion中是否缓存了用户登录信息 如果缓存了用户登录信息，则进行放行， 否则，准会登录页面，进行拦截
		 */
		// 取出session缓存中的用户信息
		AdminBean adminB = (AdminBean) request.getSession().getAttribute("UserNameA");
		OpeBean opeB = (OpeBean) request.getSession().getAttribute("UserNameO");
		UserBean userB = (UserBean) request.getSession().getAttribute("UserNameU");
		if ((adminB != null && adminB.getAdminAccount() != null && !adminB.getAdminAccount().equals(""))
				|| (opeB != null && opeB.getOpreatorAccount() != null && !opeB.getOpreatorAccount().equals(""))
				|| (userB != null && userB.getUserAccount() != null && !userB.getUserAccount().equals(""))) {
			// 用户信息验证成功
			// 放行
			return true;
		} else {
			// 用户验证失败，进行拦截
			// 跳转回登录页面
			// 重定向
			response.sendRedirect("index.jsp");
			return false;
		}

	}

	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
		// TODO Auto-generated method stub

	}

	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
		// TODO Auto-generated method stub

	}

}
